#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void swap(char* left, char* right){
    char temp = *left;
    *left = *right;
    *right = temp;
}

int compare (const void * a, const void * b){
    return ( *(char*)a - *(char*)b );
}

void PrintSortedPermutations(char str[])
{
    int strSize = strlen(str);
    qsort(str, strSize, sizeof(char), compare);

    int largerPermFound = 1;
    do{
        // 1. Print permutation
        printf("%s\n", str);
        // 2. Find rightmost char that is smaller than char to its right
        int i;
        for (i = strSize - 2; i >= 0 && str[i] >= str[i+1]; --i){}

        // if we couldn't find one, we're finished, else we can swap
        if (i >= 0){
            // 3. find character at index j such that str[j] = min(str[k]) && str[k] > str[i] for all k > i
            int j = i+1, k;
            for(k=j; k<strSize && str[k]; k++){
                if (str[k] > str[i] && str[k] < str[j])
                    j = k;
            }
            // 3. Swap chars at i and j
            swap(&str[i], &str[j]);
            // 4. Sort string to the right of i
            qsort(str+i+1, strSize-i-1, sizeof(char), compare);
        }
        else    largerPermFound = 0;
    }
    while(largerPermFound);
}

int main() {
    int n; //size of string
    scanf("%d\n",&n);
    char str[n];
    scanf("%s",str);
    PrintSortedPermutations(str);
    return 0;
}
